#include "EstrategiaRecurso.h"
#include "RecursoAlmacenamiento.h"

namespace Toolkit
{

EstrategiaRecurso::EstrategiaRecurso(const TipoSerializacion tserializacion, 
    		const unsigned long int &tamanoBloque, const bool &controlarUnicidad)
{
	this->tserializacion = tserializacion;
	this->tamanoBloque = tamanoBloque;
	this->controlarUnicidad = controlarUnicidad;
}

EstrategiaRecurso::~EstrategiaRecurso()
{
}

RecursoAlmacenamiento *EstrategiaRecurso::getRecurso() const
{
	return recurso;
}

void EstrategiaRecurso::setRecurso (RecursoAlmacenamiento* recurso)
{
	this->recurso = recurso;	
}

bool EstrategiaRecurso::buscarEnPrimario(const Clave &clave, Dato &dato, 
		WrapperComponente &wrapper, unsigned long int &posicion)
{	
	bool encontrado = false;	
	if (getRecurso()->indice != NULL) {
		encontrado = getRecurso()->indice->buscar(clave, posicion);
		if (encontrado) { 

			getRecurso()->estrategiaAlmacenamiento->recuperarDato(
					*getRecurso()->primario, posicion, dato, clave, wrapper);
		}
	} else {		
		encontrado = getRecurso()->estrategiaAlmacenamiento->
				busquedaSecuencial(*getRecurso()->primario, dato, clave, posicion, wrapper);						
	}	
	return encontrado;
}

bool EstrategiaRecurso::buscarEnPrimario(const Clave &clave, Dato &dato, WrapperComponente &wrapper)
{
	unsigned long int aux; //se descarta
	return buscarEnPrimario(clave, dato, wrapper, aux);	
}

void EstrategiaRecurso::setControlUnicidad(const bool& controlUnicidad)
{
	this->controlarUnicidad = controlUnicidad;
}

bool EstrategiaRecurso::getControlUnicidad() const
{
	return controlarUnicidad;
}

	
}
